package com.markhsiu.qrcode;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Hashtable;

import javax.imageio.ImageIO;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;

public class Main {

	 
    public static void main(String[] args) throws Exception {
    	logoQRCode();
    	commonQRCode();
    	
    	MatrixToImage.testEncode();
    	MatrixToImage.testDecode();
    }
    
    /**
     * 这个工具类 ZXingCodeUtil 是提供二维码图片生成的工具 首先使用的时候需要实例化
     * ZXingCodeUtil 然后实例化参数 ZXingConfig 和 LogoConfig 通过下面的演示可以详细看参数是按照什么循序进行设置 最后调用
     * ZXingCodeUtil 中方法 getQR_CODEBufferedImage来生成二维码
     */
    public static void logoQRCode() {
    	 String content = "http://www.baidu.com";
         System.out.println("inputParam:" + content);
         try {
             // 生成二维码
             File file = new File("E:/Michael_QRCode.png");
             ZXingCodeUtil zp = new ZXingCodeUtil(); // 实例化二维码工具
             ZXingConfig zxingconfig = new ZXingConfig();    // 实例化二维码配置参数
             zxingconfig.setHints(zp.getDecodeHintType());   // 设置二维码的格式参数
             zxingconfig.setContent(content);// 设置二维码生成内容
             zxingconfig.setLogoPath("E:/logo.png"); // 设置Logo图片
             zxingconfig.setLogoConfig(new LogoConfig());    // Logo图片参数设置   
             zxingconfig.setLogoFlg(true);   // 设置生成Logo图片
             BufferedImage bim = zp.getQR_CODEBufferedImage(zxingconfig);// 生成二维码
             ImageIO.write(bim, "png", file);    // 图片写出
             Thread.sleep(500);  // 缓冲

             zp.parseQR_CODEImage(bim);  // 解析调用
         } catch (Exception e) {
             e.printStackTrace();
         }
    }
    
    public static void commonQRCode() throws Exception {
    	   String text = "NiuYueYue I Love You！"; // 二维码内容  
    	   String text1 = "http://www.baidu.com"; // 二维码内容  
           int width = 300; // 二维码图片宽度  
           int height = 300; // 二维码图片高度  
           String format = "gif";// 二维码的图片格式  
             
           Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();  
           hints.put(EncodeHintType.CHARACTER_SET, "utf-8");   // 内容所使用字符集编码  
             
           BitMatrix bitMatrix = new MultiFormatWriter().encode(text1, BarcodeFormat.QR_CODE, width, height, hints);  
           // 生成二维码  
           File outputFile = new File("E:" + File.separator + "new.gif");  
           MatrixToImage.writeToFile(bitMatrix, format, outputFile);  
    }
}
